package com.xiaoshuidi.cloud.module.contract.service.contract;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xiaoshuidi.cloud.framework.common.pojo.CommonResult;
import com.xiaoshuidi.cloud.framework.common.pojo.PageParam;
import com.xiaoshuidi.cloud.framework.common.pojo.PageResult;
import com.xiaoshuidi.cloud.module.contract.controller.admin.contract.vo.ContractApplyPageReq;
import com.xiaoshuidi.cloud.module.contract.controller.admin.contract.vo.ContractApplyPageResp;
import com.xiaoshuidi.cloud.module.contract.controller.app.contract.vo.ApplyReqVO;
import com.xiaoshuidi.cloud.module.contract.controller.app.contract.vo.ApplyResp;
import com.xiaoshuidi.cloud.module.contract.dal.dataobject.contract.ContractApplyDO;

/**
 * 合同退租 续租 延期审批 Service 接口
 */
public interface ContractApplyService extends IService<ContractApplyDO> {

    /**
     * 租客端 - 合同退租、续租、延期申请
     *
     * @param reqVO
     * @return
     */
    ApplyResp apply(ApplyReqVO reqVO);

    /**
     * 租客端 - 合同退租、续租申请修改
     *
     * @param reqVO
     * @return
     */
    ApplyResp appUpdate(ApplyReqVO reqVO);

    /**
     * 租客端 - 撤销申请
     *
     * @param id
     * @return
     */
    Boolean appRevoke(Long id);

    /**
     * 租客端 - 获取详情
     *
     * @param id
     * @return
     */
    ApplyResp get(Long id);

    /**
     * 租客端 - 分页列表
     *
     * @param req
     * @return
     */
    PageResult<ApplyResp> appPage(PageParam req);

    /**
     * 合同申请-分页列表
     *
     * @param req
     * @return
     */
    PageResult<ContractApplyPageResp> page(ContractApplyPageReq req);

    /**
     * 审批
     *
     * @param id
     * @param flag
     * @return
     */
    Boolean approve(Long id, boolean flag);

    /**
     * 付款完成 - 延期申请变成已生效
     *
     * @param orderId
     * @return
     */
    boolean paymentCompleted(Long orderId);

    /**
     * 统计未完成的租客申请数量
     * @return
     */
    CommonResult<Long> contractApplyNum();

}
